package com.itany.corejava.code10_io.字节流;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author MissChen
 * @date 2024年03月11日 11:04
 */
public class Test05_对象输入输出流 {
    public static void main(String[] args) {
        // test01();
        test02();
    }

    // 序列化:对应的类必须实现Serializable 接口, 才能被序列化, 将对象转换成二进数据，可以通过一个文件来保存序列化后的二进制数据
    public static void test01() {
        User user = new User(1, "admin1", "123456");
        User user2 = new User(2, "admin2", "123456");
        User user3 = new User(3, "admin3", "123456");
        List<User> users = Arrays.asList(user, user2, user3);
        List list = new ArrayList();
        ObjectOutputStream oos = null;
        try {

            //字节流
            OutputStream out = new FileOutputStream("users.data");

            //包装流
            oos = new ObjectOutputStream(out);

            //写入对象
            // oos.writeObject(1);
            // oos.writeObject("aa");
            // oos.writeObject(true);
            // oos.writeObject(user);
            // oos.writeObject(user2);
            // oos.writeObject(user3);

            //任意类型都添加到list中去


            list.add(user);
            list.add(user2);
            list.add(user3);
            oos.writeObject(list);


            //刷新流
            oos.flush();


        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (oos != null) {
                    oos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }

    public static void test02() {

        try (
                ObjectInputStream in = new ObjectInputStream(new FileInputStream("users.data"));
        ) {

            //在读取数据时候，每执行一次readObject，读取一次writeObject方法所写入的数据
            // 如果超出了写入数据的次数，则报错
            //建议在写入数据的时候，使用集合来存放所有的需要的数据
            //一次性写入，一次性读取
            // Object obj=in.readObject();
            // System.out.println(obj);
            // obj=in.readObject();
            // System.out.println(obj);
            //
            // obj=in.readObject();
            // System.out.println(obj);
            //
            // obj=in.readObject();
            // System.out.println(obj);
            // obj=in.readObject();
            // System.out.println(obj);
            //
            // obj=in.readObject();
            // System.out.println(obj);
            //
            // obj=in.readObject();
            // System.out.println(obj);
            //
            // obj=in.readObject();
            // System.out.println(obj);

            Object obj = in.readObject();

            System.out.println(obj);


        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }


}
